package com.gy.boot;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import cn.hutool.poi.excel.sax.handler.RowHandler;
import com.gy.boot.common.util.BlankUtil;
import com.gy.boot.common.util.CommonUtil;
import com.gy.boot.common.util.StrTool;
import com.gy.boot.other.LxyExcel;
import org.apache.poi.ss.usermodel.CellStyle;
import org.junit.Test;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/** 处理西叶的Excel文档序号 */
public class ExcelTestLXY {

    /** 更新序号处理 */
    @Test
    public void testUpdateXH2() {
        System.out.println(DateUtil.date());
        System.out.println("步骤1: 复制一份文件");
        String old_path = "C:\\Users\\asus\\Downloads\\华西-中和CHIP血液标本登记表-test.xlsx";
        String new_path = "C:\\Users\\asus\\Downloads\\华西-中和CHIP血液标本登记表-test3.xlsx";
        String sheetName = "Sheet1"; // 工作表名称
        FileUtil.copy(old_path, new_path, true); // 复制一份
        LxyExcel.updateXH(new_path, sheetName);
    }

    /** 更新序号处理 */
    @Test
    public void updateLxyXH() {
//        updateLxyXH("ZH-", 81);
//        updateLxyXH("XJH-", 80);
        updateLxyXH("XJH-", 81);
    }
    /** 序号处理: 已pre为前缀,每rows行一组,每组数字递增 */
    private void updateLxyXH(String pre, int rows) {
        System.out.println(DateUtil.date());
        System.out.println("步骤1: 复制一份文件");
        String old_path = "C:\\Users\\asus\\Downloads\\ZH-test.xlsx";
        String new_path = "C:\\Users\\asus\\Downloads\\${file_name}.xlsx";
        String sheetName = "Sheet1"; // 工作表名称
        String file_name = pre + rows;
        new_path = new_path.replace("${file_name}", file_name);
        FileUtil.copy(old_path, new_path, true); // 复制一份
        LxyExcel.updateXH(new_path, sheetName, pre, rows);
    }


    /** 2025-05-16: 匹配员工身份证号 */
    @Test
    public void test20250516() {
        String new_path = "C:\\Users\\asus\\Downloads\\刘LY副本匹配成功.xls";
        // 匹配成功的数据-获取证件号码
        List<String> listPP = new ArrayList<>();
        ExcelUtil.readBySax(new_path, "匹配成功", readRow1(listPP));
        // 匹配成功的数据-获取证件号码
        List<List<String>> listRow = new ArrayList<>();
        listRow.add(CollUtil.newArrayList("", "姓名", "身份证号", "问卷类别"));
        ExcelUtil.readBySax(new_path, "总表", readRow2(listRow, listPP));
        // 生成新表数据
        ExcelWriter writer = ExcelUtil.getWriter(new_path, "未匹配");
        writer.write(listRow);
        writer.close();
        System.out.println("更新序号完毕,请检查!!!");
    }

    /** 匹配总表中没有的数据 */
    private RowHandler readRow2(List<List<String>> listRow, List<String> listPP) {
        return (sheetIndex, rowIndex, rowList) -> {
            if (rowIndex < 1) { return; }
            String name = CommonUtil.getValue(rowList, 1); // A列值-姓名
            String code = CommonUtil.getValue(rowList, 2); // B列值-身份证号
            String type = CommonUtil.getValue(rowList, 3); // C列值-问卷类别
            if (BlankUtil.isBlankNull(code)) { return; }
            if (listPP.contains(code)) { return; }
            listRow.add(CollUtil.newArrayList("", name, code, type));
        };
    }
    /** 读取第一列数据 */
    private static RowHandler readRow1(List<String> listPP) {
        return (sheetIndex, rowIndex, rowList) -> {
            if (rowIndex < 1) { return; }
            String code = CommonUtil.getValue(rowList, 2); // B列值-身份证号
            if (BlankUtil.isBlankNull(code)) { return; }
            listPP.add(code);
        };
    }

}
